package br.com.Orange.controller;

import java.util.Collection;

import br.com.Orange.controller.exception.FuncionarioExistenteException;
import br.com.Orange.controller.exception.FuncionarioInexistenteException;
import br.com.Orange.dao.funcionarios.RepositorioFuncionario;
import br.com.Orange.model.Funcionario;
import br.com.Orange.model.Gerente;
import br.com.Orange.util.dados.exception.RepositorioVazioException;

public class CadastroFuncionarios {
	
	private RepositorioFuncionario funcionarios;
	
	private static int matricula = 500;
	
	public CadastroFuncionarios(RepositorioFuncionario funcionarios){
		this.funcionarios = funcionarios;
	}
	
	public void inserirFuncionario(String nome, String CPF, double salario, String senha) 
							throws FuncionarioExistenteException{
		if (!funcionarios.existe(CPF)){
			Funcionario funcionario = new Funcionario(nome, CPF, matricula, salario, senha);
			funcionarios.inserir(funcionario);
			matricula++;
		}else{
			throw new FuncionarioExistenteException(CPF);
		}
	}
	
	public void inserirGerente(String nome, String CPF, double salario, String senha) 
						throws FuncionarioExistenteException{
		if (!funcionarios.existe(CPF)){
			Gerente gerente = new Gerente(nome, CPF, matricula, salario, senha);
			funcionarios.inserir(gerente);
			matricula++;
		}else{
			throw new FuncionarioExistenteException(CPF);
		}
	}
	
	public Funcionario procurar (int matricula) throws FuncionarioInexistenteException{
		return funcionarios.procurar(matricula);
	}
	
	public void atualizar(Funcionario funcionario) throws FuncionarioInexistenteException{
		funcionarios.atualizar(funcionario);
	}
	
	public void remover(int matricula) throws FuncionarioInexistenteException{
		funcionarios.remover(matricula);
	}
	
	public Collection<Funcionario> listar() throws RepositorioVazioException{
		return funcionarios.listar();
	}
	
	public boolean existe(int matricula){
		return funcionarios.existe(matricula);
	}
}